package Dominio;

import hbt.PersistentObject;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import dto.CotizacionTO;
import dto.ItemOrdenDePedidoTO;
import dto.OrdenPedidoTO;
import dto.SolicitudDeCotizacionTO;



@Entity
@Table(name = "ordenes_de_pedido")
public class OrdenDePedido extends PersistentObject{
	
	private static final long serialVersionUID = 1L;
	
	private int numeroOrdenPedido;
	private java.util.Date fechaPedido;
	
	@ManyToOne(cascade=CascadeType.MERGE)
	@JoinColumn(name="idCliente")
	private Cliente cliente;
	
	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name="idOrdenDePedido")
	private List<ItemOrdenDePedido> itemsDePedido;
		
	
	@OneToMany(cascade=CascadeType.MERGE)
	@JoinColumn(name="idOrdenDePedido")
	private List<Cotizacion> cotizaciones;
	
	@Column(name="estadoOrdenDePedido")
	private String estado;
		
	
	public Cliente getCliente() {
		return cliente;
	}
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	
	public List<ItemOrdenDePedido> getItemsDePedido() {
		return itemsDePedido;
	}
	public void setItemsDePedido(List<ItemOrdenDePedido> itemsDePedido) {
		this.itemsDePedido = itemsDePedido;
	}

	public List<Cotizacion> getCotizaciones() {
		return cotizaciones;
	}
	public void setCotizaciones(List<Cotizacion> cotizaciones) {
		this.cotizaciones = cotizaciones;
	}
	public String getEstado() {
		return estado;
	}
	public void setEstado(String estado) {
		this.estado = estado;
	}
	
	public java.util.Date getFechaPedido() {
		return fechaPedido;
	}
	public void setFechaPedido(java.util.Date convertedDate) {
		this.fechaPedido = convertedDate;
	}
	public int getNumeroOrdenPedido() {
		return numeroOrdenPedido;
	}
	public void setNumeroOrdenPedido(int numeroPedido) {
		this.numeroOrdenPedido = numeroPedido;
	}
	
	public OrdenPedidoTO toTO() {

		List<ItemOrdenDePedidoTO> itemsDePedidoTO = new ArrayList<ItemOrdenDePedidoTO> ();
		for(ItemOrdenDePedido itemOP : this.itemsDePedido)
		{
			itemsDePedidoTO.add(itemOP.toTO());
		}	
			
		List<CotizacionTO> cotizacionesTO = new ArrayList<CotizacionTO> ();
		for(Cotizacion cotiz : this.cotizaciones)
		{
			CotizacionTO coTO = new CotizacionTO();
			
			coTO.setCliente(cotiz.getCliente().toTO());
			coTO.setEstado(cotiz.getEstado());
			coTO.setFechaCotizacion(cotiz.getFechaCotizacion());
			coTO.setFechaEnvio(cotiz.getFechaEnvio());
			coTO.setFechaVencimiento(cotiz.getFechaVencimiento());
			coTO.setFormaPago(cotiz.getFormaPago().toTO());
			coTO.setNumeroCotizacion(cotiz.getNumeroCot());
			coTO.setSolicitudDeCotizacion(new SolicitudDeCotizacionTO());
			coTO.setTermino(cotiz.getTermino());
			
			cotizacionesTO.add(coTO);
		}	
		
		OrdenPedidoTO opTO = new OrdenPedidoTO(this.numeroOrdenPedido,this.fechaPedido,this.cliente.toTO(),
												this.estado,itemsDePedidoTO,cotizacionesTO);
		return opTO;	
	}
}
